package util;

import java.util.ArrayList;

/**
 * Classe qui produit aléatoirement un chiffre de 1 à 8 correspondant aux 8
 * directions possibles autour d'un espace. Chaque direction ne peut être tirée
 * qu'une seule fois par la classe. -1 est retourné lorsqu'il n'y a plus de
 * direction possible.
 * 
 * @author martin
 *
 */
public class RandomSansRepetition implements Sequence {
	private ArrayList<Integer> directionsPossibles; // true direction déjà
													// utilisée

	public RandomSansRepetition(int nombreDeNumero) {
		directionsPossibles = new ArrayList<Integer>(nombreDeNumero);
		for (int i = 0; i < nombreDeNumero; i++) {
			directionsPossibles.add(i);
		}

	}

	/**
	 * Retourne un nombre aléatoire de 1 à 8. Chaque nombre ne peut sortir
	 * qu'une seule fois. -1 est retourné lorsqu'il n'y a plus de direction
	 * possible.
	 * 
	 * @return le nombre aléatoire ou -1
	 */
	public int randomSansRepetition() {
		int retVal = -1;
		if (!directionsPossibles.isEmpty()) {
			int choix = (int) (Math.random() * directionsPossibles.size());
			retVal = directionsPossibles.get(choix);
			directionsPossibles.remove(choix); // une seule fois chaque numéro
		}
		return retVal;
	}

	@Override
	public int nextNumber() {
		return randomSansRepetition();
	}
}
